Gitlab-CIからPersonal Access Tokenを使ってbuild&push
ビルド自動化したいなーって要望って結構あると思うんですよ。
プログラム変更して、いざリリース!って思ったらビルドし忘れてて思ったようにリリース出来ず。みたいな。
どうせテストとかもCIで自動化するんですし、buildも自動化しちゃって、リポジトリにあげちゃいましょう。
ソースはこちら
注意
この方法はGitlab.comのGitlab-CIを利用するものなので、他のGitホスティングサービスでは全く参考になりません
Personal Access Tokenを利用する方法なので、トークン発行者がリポジトリにアクセスできなくなったら動かなくなります
Personal Access Tokenは全体に影響するので、関係ないリポジトリでも読み書きできちゃいます
SSHでの方法で他の方法も提供されていそうなので、いずれそれも記事にします
以上のことを把握したうえでやりましょ
アクセストークンの発行
User > Settings > Access Tokens で新しいアクセストークンを作ります
Nameは分かりやすい名前を、
Scopeはwrite_repositoryを選びます。
https://gyazo.com/423e54edad5dde91fd5489d7aeb70cb5
登録すると、アクセストークンが発行されるので、コピーしておきます。
https://gyazo.com/5d9b2f124583ed5825522d8246020f77
CI時の環境変数にいれる
次に自動でbuild&pushしたいリポジトリを開いて、
Settings > CI / CD > Variables にいって、
Keyに分かりやすい名前(WRITE_ACCESS_TOKEN)、
Valueに生成されたアクセストークンを入れて登録します。(入れた瞬間は*になっていません
https://gyazo.com/56940c398801dde2a331daed708a5b30
いざ、CI!!
以上で準備ができたので、あとは.gitlab-ci.ymlをpushするだけです。
code:.gitlab-ci.yml
image: golang:1.13
stages:
- build
build_job:
stage: build
script:
- go build -o main main.go
# gitlabへの反映
- git config user.name auto-builder
- git config user.email auto_builder@example.com
- git add -A
- git diff-index --quiet HEAD || git commit -m "ci skip commited by auto-builder" only:
- master
buildはgo build -o main main.goをするだけで、
buildをpushするのが# gitlabへの反映下の部分です。
git config user.name auto-builder
pushするユーザ名を設定します
適当でいいですが、分かりやすい名前がいいです
git config user.email auto_builder@example.com
pushするユーザのメールアドレスを設定します
適当でいいです
git add -A
buildした結果をaddしています
buildした結果はmainというバイナリのスクリプト
git diff-index --quiet HEAD || git commit -m "[ci skip] commited by auto-builder"
addした内容をそのままcommitします
commit messageの[ci skip]が重要で、これがあるコミットはCIのパイプラインが作られません
これのおかげで、無限ループにハマるのを防げます
git push -f https://oauth2:${WRITE_ACCESS_TOKEN}@gitlab.com/tsuchinaga/auto-build-and-push.git HEAD:master
commitをpushします
${WRITE_ACCESS_TOKEN}にアクセストークンの中身が入ります
この.gitlab-ci.ymlをpushをすると、masterブランチにpushしたときにbuild&pushが動くようになります
おわりに
これは個人プロジェクト向きの方法です
最初に注意で上げている通り、Personal Access Tokenを使っているので、
Access Tokenの発行者がリポジトリにアクセスできなくなった時点で動かなくなります。
そうじゃない方法もあるので、次はその記事を作ります。